package com.ruiyi.subway.dao;

import java.io.Serializable;
import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;

/**
 * mybatis dao 基类
 */
public class SupperDao extends SqlSessionDaoSupport {
	
	protected Logger log = LoggerFactory.getLogger(getClass());
	
	/**
	 * 保存
	 * @param key
	 * @param object
	 */
	public void save(String key, Object object) {
		getSqlSession().insert(key, object);
	}
	
	/**
	 * 修改
	 * @param key
	 * @param object
	 */
	public void update(String key, Object object) {
		getSqlSession().update(key, object);
	}
	
	
	/**
	 * 删除
	 * @param key
	 * @param id
	 */
	public void delete(String key, Serializable id) {
		getSqlSession().delete(key, id);
	}
	
	/**
	 * 删除
	 * @param key
	 * @param object
	 */
	public void delete(String key, Object object) {
		getSqlSession().delete(key, object);
	}
	
	/**
	 * 查询 返回一个结果
	 * @param <T>
	 * @param key
	 * @param params
	 * @return
	 */
	public <T> T get(String key, Object params) {
		return (T) getSqlSession().selectOne(key, params);
	}
	
	/**
	 * 查询 返回一个结果
	 * @param <T>
	 * @param key
	 * @param params
	 * @return
	 */
	public <T> T get(String key) {
		return (T) getSqlSession().selectOne(key);
	}
	
	/**
	 * 查询 返回多个结果
	 * @param <T>
	 * @param key
	 * @return
	 */
	public <T> List<T> findList(String key) {
		return getSqlSession().selectList(key);
	}
	
	/**
	 * 分页查询
	 * @param <T>
	 * @param key
	 * @param offset
	 * @param pageSize
	 * @return
	 */
	public <T> List<T> findList(String key,int offset,int pageSize) {
		return getSqlSession().selectList(key,new RowBounds(offset, pageSize));
	}

	/**
	 * 查询 可带参数 返回多个结果
	 * @param <T>
	 * @param key
	 * @param params
	 * @return
	 */
	public <T> List<T> findList(String key, Object params) {
		return getSqlSession().selectList(key, params);
	}
	
	/**
	 * 分页查询 可带参数
	 * @param <T>
	 * @param key
	 * @param params 参数
	 * @param pageOffset 开始记录数
	 * @param pageSize 每页记录数
	 * @return
	 */
	public <T> List<T> findList(String key, Object params,int pageOffset,int pageSize) {
		return getSqlSession().selectList(key, params,new RowBounds(pageOffset, pageSize));
	}
	

}
